package com.calvin.study.lock.eightlock;

import java.util.concurrent.TimeUnit;

public class LockTest4 {

	public static void main(String[] args) {
		LockTest4 lt = new LockTest4();
		// 7、1个静态的同步方法，1个普通的同步方法 ，一个对象，先打印 发短信？打电话？
		// 静态同步方法锁的是Class类模板 普通同步方法 锁的是调用者，分别为两把不同的锁。而普通的同步方法不需要等待sendSms()方法的锁
		// lt.test7();
		// 8、1个静态的同步方法，1个普通的同步方法 ，两个对象，先打印 发短信？打电话？
		lt.test8();
	}

	public void test7() {
		Phone4 phone = new Phone4();

		new Thread(() -> {
			phone.sendSms();// 类锁
		}, "A").start();

		try {
			TimeUnit.SECONDS.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		new Thread(() -> {
			phone.call();// 对象锁
		}, "B").start();
	}

	public void test8() {

		Phone4 phone = new Phone4();
		Phone4 phone2 = new Phone4();

		new Thread(() -> {
			phone.sendSms();
		}, "A").start();

		new Thread(() -> {
			phone2.call();
		}, "B").start();
	}
}

class Phone4 {
	// synchronized 锁的对象是 该方法的调用者！
	public synchronized static void sendSms() {
		try {
			TimeUnit.SECONDS.sleep(4);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("发短信");
	}

	public void call() {
		System.out.println("打电话");
	}

}